﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;
using Tibet.Logica;
using NUnit.Framework;

namespace Tibet.Pruebas
{

    [TestFixture]

    /// <summary>
    ///This is a test class for PruebaProyecto and is intended
    ///to contain all PruebaProyecto Unit Tests
    ///</summary>

    public class PruebaProyecto
    {


        public void PruebaProyectoConstructor()
        {
            Proyecto target = new Proyecto();

        }


        [TestCase]
        public void PruebAplicarPerfilReglas()
        {
            Proyecto target = new Proyecto(); // TODO: Initialize to an appropriate value
            bool expected = false; // TODO: Initialize to an appropriate value
            bool actual;
            actual = target.AplicarPerfilReglas();
            Assert.AreEqual(expected, actual);
        }


        [TestCase]
        public void PruebaConsultaCorreoLider()
        {
            Proyecto target = new Proyecto(); // TODO: Initialize to an appropriate value

            String cadenaVacia = String.Empty;
            Assert.AreNotEqual(cadenaVacia, target.ConsultaCorreoLider());
            Assert.IsNotNull(target.ConsultaCorreoLider());

        }



        [TestCase]
        public void PruebaConsultarDatosProyecto()
        {
            Proyecto target = new Proyecto(); // TODO: Initialize to an appropriate value

            int id = 0;                                                                     //inicializo un id aleatorio en "0" para confirmar que se esta devolviendo algun valor
            Proyecto proyectoActual = target.ConsultarDatosProyecto(id);                    //asigno a una variable auxiliar el proyecto resultante del metodo
            Assert.IsNotNull(proyectoActual);                                               //evaluo si el objeto es distinto de null
            Assert.IsInstanceOfType(typeof(Proyecto), proyectoActual);                      //evaluo el tipo de dato del objeto resultan
            Assert.AreEqual(id, proyectoActual.Id);                                         //evaluo si el id del objeto corresponde con el id que mande a buscar
            Assert.AreNotEqual(String.Empty, proyectoActual.Nombre);                        //evaluo que los valores se muestren.
            Assert.AreNotEqual(String.Empty, proyectoActual.MiCliente);
            Assert.AreNotEqual(String.Empty, proyectoActual.Ruta);
            Assert.AreNotEqual(String.Empty, proyectoActual.Status);



        }


        [TestCase]
        public void PruebaRegistrarFecha()
        {
            Proyecto target = new Proyecto(); // TODO: Initialize to an appropriate value
            //  target.registrarFecha();
            //  Assert.Inconclusive("A method that does not return a value cannot be verified.");
        }


        [TestCase]
        public void PruebaValidarDesarrollador()
        {
            Proyecto target = new Proyecto();                      //creo un proyecto auxiliar de tipo proyecto

            bool actual = target.ValidarDesarrollador();           //creo un atributo auxiliar y luego le asigno el resultante del metodovalidarDesarrolladores
            Assert.AreEqual(true, actual);                         //pruebo si el resultado es el esperado.

        }


        [TestCase]
        public void PruebaValidarSoloLetras()
        {
            Proyecto target = new Proyecto();                     //cre un proyecto auxiliar de tipo proyecto
            bool actual;                                          //creo un atributo auxiliar y luego le asigno el resultante del metodo
            actual = target.ValidarSoloLetras();                  //validarSoloLetras
            Assert.AreEqual(true, actual);                        //evaluo si es igual a verdadero.

        }




        [TestCase]
        public void PruebaConexionBdProyecto()
        {
            Proyecto target = new Proyecto(); // TODO: Initialize to an appropriate value
            target.ConexionBdProyecto();

        }


        [TestCase]
        public void PruebaAgregarDesarrollador()
        {
            Usuario user = new Usuario();
            Proyecto target = new Proyecto(); // TODO: Initialize to an appropriate value
            bool expected = true; // TODO: Initialize to an appropriate value
            bool actual;
            actual = target.AgregarDesarrollador(user);
            Assert.AreEqual(expected, actual);
        }

        [TestCase]
        public void PruebaAplicarPerfilMetricas()
        {
            Proyecto target = new Proyecto(); // TODO: Initialize to an appropriate value
            bool expected = true; // TODO: Initialize to an appropriate value
            bool actual;
            actual = target.AplicarPerfilMetricas();
            Assert.AreEqual(expected, actual);
        }


        [TestCase]
        public void PruebaBuscarFecha()
        {
            Proyecto target = new Proyecto(); // TODO: Initialize to an appropriate value
            string expected = ""; // TODO: Initialize to an appropriate value
            string actual;
            actual = target.BuscarFecha();
            Assert.AreNotEqual(expected, actual);
        }


        [TestCase]
        public void PruebaModificarIntegranteProyecto()
        {
            Proyecto target = new Proyecto(); // TODO: Initialize to an appropriate value
            bool expected = true; // TODO: Initialize to an appropriate value
            bool actual;
            actual = target.ModificarIntegranteProyecto();
            Assert.AreEqual(expected, actual);
        }


        [TestCase]
        public void PruebaModificarNumIntegrantes()
        {
            Proyecto target = new Proyecto(); // TODO: Initialize to an appropriate value
            bool expected = true; // TODO: Initialize to an appropriate value
            bool actual;
            actual = target.ModificarNumIntegrantes();
            Assert.AreEqual(expected, actual);
        }

        [TestCase]
        public void PruebaCrearProyecto()
        {
            Boolean resp;
            Proyecto proy = new Proyecto();                         //se crea objeto proy de tipo proyecto
            Proyecto target = new Proyecto();                       //crea un proyecto target de tipo proyecto
            resp = target.CrearProyecto(proy);                       //se llama el metodo crear proyecto con el proyecto creado anteriormente
            Proyecto revisar = new Proyecto();                      //se crea un nuevo proyecto que servira de comparacion
            revisar.Id = proy.Id;                                     //se le asigna el id del proyecto proy al proyecto revisar 
            revisar.Nombre = proy.Nombre;                           //se le asigna el nombre del proyecto proy al proyecto revisar 
            Proyecto consultar = target.ConsultarDatosProyecto(revisar.Id); //se va a consultarDatosProyectos con el id de revisar a ver si existe realmente en la BD
            Assert.IsTrue(resp);                                    //si resp es verdadero indica que crearProyecto se ejecuto exitosamente
            Assert.IsInstanceOfType(typeof(Proyecto), consultar);   //se verifica que consultar(proyecto q se busca en la BD) sea de tipo proyecto
            Assert.AreEqual(proy.Id, consultar.Id);                  //De aqui en adelante se verifica que los datos de los atributos del proyecto proy
            Assert.AreEqual(proy.Nombre, consultar.Nombre);          //sean iguales a los datos de los atributos del proyecto consultado en la BD
            Assert.AreEqual(proy.Status, consultar.Status);          //de esta manera se comprueba que realmente se inserto
            Assert.AreEqual(proy.Lenguaje, consultar.Lenguaje);
            Assert.AreEqual(proy.Ruta, consultar.Ruta);
        }

        [TestCase]
        public void PruebaModificarNombreProyecto()
        {
            Proyecto target = new Proyecto();                       //crea un proyecto target de tipo proyecto
            bool expected = true;                                   //variable boleana expected,se asigna true que es el valor devuelto si se modifica con exito
            bool actual;                                            //variable booleana actual, servira para comparar si el valor actual es el esperado (true)
            int idProyecto = 1;                                     //entero usado para buscar un proyecto con id 1
            actual = target.ModificarNombreProyecto(idProyecto);    //se le asigna a la variable booleana actual el valor que devuelve el metodo de modificacion 
            //del nombre del proyecto con id 1
            Assert.AreEqual(expected, actual);                      //se compara que el valor esperado(true) sea igual al devuelto por el metodo de modificacion
            //del nombre del proyecto
        }
    }
}
